android 捕获全局crash 崩溃闪退异常捕获

您所在的位置:网站首页 android jni crash android 捕获全局crash 崩溃闪退异常捕获

android 捕获全局crash 崩溃闪退异常捕获

2023-08-13 14:36| 来源: 网络整理| 查看: 265

开发中有些地方未注意可能造成异常抛出未能caught到,然后弹出系统对话框强制退出。这种交互不好,而且开发者也不能及时获取到底哪里出问题,当然可以接入第三方Crash分析平台比如Bugly、instabug,其实也可以自己很简单的实现全局异常处理。

未捕获异常大多发生在在多线程环境中,子线程抛出的异常是不能用主线程中try….catch捕获。可以给线程设置UncaughtExceptionHandler,当出现异常时会回调UncaughtExceptionHandler中的uncaughtException(Thread t, Throwable e) 方法。

设置可以为某个线程单独设   这个可以在activity中给某个特定的线程设置   只对当前thread起作用

thread.setUncaughtExceptionHandler(new MyUncaughtExceptionHandler());

当想给所有线程设置时使用   这个可以设置在appliction的oncreat里面  对全局起作用

Thread.setDefaultUncaughtExceptionHandler(new MyUncaughtExceptionHandler());

然后MyUncaughtExceptionHandler是一个自定义的内部类   如果有需要也可以自己实现一个外部类  丰富里面的方法  保存log  自启   上传log   弹窗提示  直接退出  都可以自己实现  留给自己的操作空间非常大   可以实现完美退出

private class MyUncaughtExceptionHandler implements Thread.UncaughtExceptionHandler { @Override public void uncaughtException(Thread thread, Throwable ex) { //todo } }

 

下面附上application声明周期介绍    以供参考   有需要的话  可以组合使用  下过可能会更好  

public class LifeCycleApplication extends Application { private static String TAG = "LifeCycleApplication"; @Override public void onCreate() { // 程序创建的时候执行 Log.d(TAG, "onCreate"); super.onCreate(); } @Override public void onTerminate() { // 程序终止的时候执行 Log.d(TAG, "onTerminate"); super.onTerminate(); } @Override public void onLowMemory() { // 低内存的时候执行 Log.d(TAG, "onLowMemory"); super.onLowMemory(); } @Override public void onTrimMemory(int level) { // 程序在内存清理的时候执行(回收内存) // HOME键退出应用程序、长按MENU键,打开Recent TASK都会执行 Log.d(TAG, "onTrimMemory"); super.onTrimMemory(level); } @Override public void onConfigurationChanged(Configuration newConfig) { Log.d(TAG, "onConfigurationChanged"); super.onConfigurationChanged(newConfig); } }  

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3